package com.mzy.datepackage.M2022.Jan.twSer;

/**
 * @author Ives
 * * @date 2022/1/27
 */
public class demo {
  public static boolean isPalindrome(int x) {
    int tmp = 0;
    //当x为负数，或者x的末尾为0时（因为这意味着第一个数也是0），返回错误
    if (x < 0 || (x % 10 == 0 && x != 0)) {
      return false;
    }
    while (x > tmp) {
/**
 * 现在，让我们来考虑如何反转后半部分的数字。 对于数字 1221，如果执行 1221 % 10，我们将得到最后一位数字 1，要得到倒数第二位数字，
 * 我们可以先通过除以 10 把最后一位数字从 1221 中移除，1221 / 10 = 122，再求出上一步结果除以10的余数，122 % 10 = 2，
 * 就可以得到倒数第二位数字。如果我们把最后一位数字乘以10，再加上倒数第二位数字，1 * 10 + 2 = 12，就得到了我们想要的反转后的数字。
 * 如果继续这个过程，我们将得到更多位数的反转数字。
 * 32123 321
 */
/**
 * 我们将原始数字除以 10，然后给反转后的数字乘上 10，
 * 所以，当原始数字小于反转后的数字时，就意味着我们已经处理了一半位数的数字。
 */
      tmp = tmp * 10 + x % 10;
      x = x / 10; // 不断的得到左位移一位的原始数据
    }
    // tmp = 1, x=122; tmp=12,x=12;tmp=122,x=1;tmp=1221,x=0;
    //当x为偶数个时，如1221，则判断前两位和后两位是否相同
    //当x为奇数个时，如121，则考虑除了中间一位的前半段和后半段是否相同；
    if (tmp == x || tmp / 10 == x) {
      return true;
    } else {
      return false;
    }
  }

  public static void main(String[] args) {
    boolean palindrome = isPalindrome(121);
    System.out.println(palindrome);
  }
}
